package model

import (
	"fmt"
	"gorm.io/gorm"
	"imProject/utils"
	"strconv"
	"time"
)

// mysql-window下载地址
// https://cdn.mysql.com//Downloads/MySQL-9.1/mysql-9.1.0-winx64.zip

// 用户的存储信息结构， 通过gorm直接创建相对应的数据库表
type UserBasic struct {
	gorm.Model
	Name          string
	Password      string
	Email         string `valid:"email"`
	Phone         string `valid:"matches(^1[3-9]{1}[0-9]{9}$)"`
	Salt          string
	Identity      string
	ClientIP      string
	ClientPort    string
	LoginTime     *time.Time
	HeartBeatTime *time.Time
	LogoutTime    *time.Time
	IsLogout      bool
	DeviceInfo    string
}

// 由于 HeartBeatTime LoginTime LogoutTime 的初始值为00000的数据格式 数据库不存储
// 将 这三个值先设为空值能录入进数据库
func init() {
	var nilVal *time.Time
	user2 := UserBasic{
		HeartBeatTime: nilVal,
		LoginTime:     nilVal,
		LogoutTime:    nilVal,
	}
	if user2.LoginTime != nil {
		fmt.Println("user2.LoginTime:", user2.LoginTime)
	}

}

// gorm调用 创建表， 返回值为表名
func (table *UserBasic) TableName() string {
	return "user_basic"
}

// 用户登录模块
func CheckLogin(name string, password string) UserBasic {

	// 查找用户
	user := UserBasic{}
	utils.InitMySql().Where("name = ? and password = ?", name, password).Find(&user)

	// 给用户添加每次登录时都不同的token 赋值给user的identity字段
	timeNow := strconv.Itoa(int(time.Now().Unix()))
	encryptToken := utils.Md5Encoding(timeNow)
	utils.InitMySql().Model(&user).Where("id = ?", user.ID).Update("identity", encryptToken)

	return user
}

// 查找用户名是否存在
func FindUserInName(name string) UserBasic {
	user := UserBasic{}
	utils.InitMySql().Where("name = ?", name).Find(&user)
	return user
}

// 查找电话号码是否存在
func FindUserInPhone(phone string) UserBasic {
	user := UserBasic{}
	utils.InitMySql().Where("phone = ?", phone).Find(&user)
	return user
}

// 查找邮箱是否存在
func FindUserInEmail(email string) UserBasic {
	user := UserBasic{}
	utils.InitMySql().Where("email = ?", email).Find(&user)
	return user
}

// 列出所有用户的模块
func GetUserListInMySQL() []*UserBasic {
	data := make([]*UserBasic, 10)
	if utils.InitMySql() == nil {
		fmt.Println("db is nil")
	}
	utils.InitMySql().Find(&data)
	return data
}

// 创建用户模块
func CreateUserBasic(user *UserBasic) *gorm.DB {
	if utils.InitMySql() == nil {
		fmt.Println("db is nil")
	}
	return utils.InitMySql().Create(&user)
}

// 删除用户模块
func DeleteUserBasic(user *UserBasic) *gorm.DB {
	if utils.InitMySql() == nil {
		fmt.Println("db is nil")
	}
	return utils.InitMySql().Delete(&user)
}

// 更新用户模块
func UpdateUserBasic(user *UserBasic) *gorm.DB {
	if utils.InitMySql() == nil {
		fmt.Println("db is nil")
	}
	return utils.InitMySql().Updates(&user)
}
